1
おもちゃのデータセットから現実世界の混沌へ
EvoClass-AI002第5講義
00:00

1. 案内:データロードの基本

深層学習モデルはクリーンで一貫したデータに依存しますが、現実世界のデータセットは本質的に散らかっています。我々は、MNISTなどの事前構成されたベンチマークから、データロード自体が複雑な調整作業となる非構造化ソースを管理する状態へと移行しなければなりません。このプロセスの基盤は、データ管理に特化したPyTorchのツールにあります。

中心的な課題は、ディスク上に分散して保存された生のデータ(画像、テキスト、音声ファイルなど)を、高度に整理され標準化されたPyTorchのテンソル形式GPUが期待する形式に変換することです。これにはインデックス付け、読み込み、前処理、そして最後にバッチ化のためのカスタムロジックが必要です。

現実世界のデータにおける主な課題

  • データの混乱:複数のディレクトリに散在しており、多くの場合、CSVファイルでのみインデックス付けされている。
  • 前処理が必要:画像はテンソルに変換する前に、サイズ変更、正規化、または拡張処理が必要な場合があります。
  • 効率の目標:データは最適化され、ブロッキングしないバッチ形式でGPUに送られるべきであり、学習速度を最大化するために重要です。
PyTorchの解決策:役割分担
PyTorchは関心の分離を強制します:Datasetは「何をやるか」(単一のサンプルとラベルにアクセスする方法)を担当し、一方DataLoaderは「どのようにやるか」(効率的なバッチ化、シャッフル、マルチスレッドによる配信)を担当します。
data_pipeline.py
ターミナルbash — data-env
> 処理準備完了。実行するには「実行」をクリックしてください。
>
テンソルインスペクターライブ

プログラムを実行してアクティブなテンソルを確認してください。
問題1
PyTorchのDatasetオブジェクトの主な役割は何ですか?
サンプルをミニバッチに整理し、シャッフルする。
1つの前処理済みサンプルを取得するためのロジックを定義する。
モデル内部での行列乗算を行う。
問題2
どのDataLoaderパラメータが複数のCPUコアを使って並列でデータを読み込むことを可能にしますか?
device_transfer
batch_size
num_workers
async_load
問題3
あなたの生の画像がすべて異なるサイズの場合、どれが主にそれらを統一された寸法(例:$224 \times 224$)にリサイズする責任を持ちますか?
DataLoaderのcollate_fn
GPUの専用画像プロセッサ。
Datasetの__getitem__メソッド内で適用される変換関数。
チャレンジ:カスタム画像ローダーの設計図
現実世界の画像分類に必要な構造を定義してください。
あなたは、パスとラベルを含む1つのCSVファイルでインデックス付けされた1万枚の画像用のCustomDatasetを構築しています。
ステップ1
合計のサンプル数を返さなければならない必須メソッドはどれですか?
解答:
__len__メソッド内で適用される変換関数。
Concept: Defines the epoch size.
ステップ2
内部の正しい処理順序はどれですか?__getitem__(self, index)
解答:
1. index
を使ってファイルパスを検索する。 2. 生データ(例:画像)を読み込む。
3. 必要なtransforms
を適用する。 4. 処理されたテンソルとラベルを返す。